
package com.pl.controller;

import com.pl.common.JsonResult;
import com.pl.config.MicroServiceUrl;
import com.pl.service.TestLogService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;


/**
 * @author shent
 * 1.注解@Resource是Java自己的注解，@Resource有两个属性是比较重要的，
 * 分是name和type；Spring将@Resource注解的name属性解析为bean的名字，
 * 而type属性则解析为bean的类型。所以如果使用name属性，则使用byName的自动注入策略，
 * 而使用type属性时则使用byType自动注入策略。
 * 如果既不指定name也不指定type属性，这时将通过反射机制使用byName自动注入策略。
 * 2.注解@Autowired是spring的注解，
 * 是spring2.5版本引入的，Autowired只根据type进行注入，
 * 不会去匹配name。如果涉及到type无法辨别注入对象时，那需要依赖 @Qualifier 或 @Primary 注解一起来修饰。
 */

@Api(tags = "测试controller")
@RestController
@RequestMapping("log")
public class TestLogController {
    @Autowired
    TestLogService testLogService;

    @Resource
    MicroServiceUrl microServiceUrl;

    Logger logger = LoggerFactory.getLogger(TestLogController.class);

    @GetMapping("print")
    public void print() {
        testLogService.logTest();
    }

    @ApiImplicitParam(name = "name", value = "姓名", required = true)
    @ApiOperation(value = "传入姓名,返回姓名json,打印日志")
    @GetMapping("test")
    public JsonResult<String> test(@RequestParam(value = "name") String name) {
        logger.info(microServiceUrl.getBaiduUrl());
        logger.info(microServiceUrl.getBilibiliUrl());
        return new JsonResult<>(name);
    }
}

